package br.ufmg.dees.insane.ui.rich.learn.util.interfaces;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintWriter;

import br.ufmg.dees.insane.ui.rich.learn.util.input_output_dialogs.OutputDialog;

// Curso de Mestrado - Computacao Aplicada a Engenharia 2004.1
// Trabalho em Grupo 
// Grupo 08: Luciana, Renata e Marcos
/** Uma classe para persistencia de dados e resultados em arquivo */

public class IntArquivo
{	
	/** Metodo getSufixo
	 * Metodo que devolve o sufixo do arquivo (antes do ponto)
	 *@param nomearq nome do arquivo 
	 *@return uma string com o sufixo do arquivo */
	 public static String getSufixo(String nomearq) 
	 {
	 	String suf="";
	 	int tam=nomearq.length();
	 	int cont=0; boolean achou=false;
	 	while ((cont<tam-1)&&(!achou))
	 	{
	 		if (nomearq.charAt(cont)=='.') achou=true;
	 		else
	 		{
	 			suf+=nomearq.charAt(cont);
	 			cont++;
	 		}	 		
	 	}
	 	return suf;
	 }// fim de getSufixo
	 
	 /** Metodo getExtensao
	 * Metodo que devolve a extensao do arquivo (depois do ponto)
	 *@param nomearq nome do arquivo 
	 *@return uma string com a extensao do arquivo */
	 public static String getExtensao(String nomearq) 
	 {
	 	String ext="";
	 	int tam=nomearq.length();
	 	int cont=tam-1; boolean achou=false;
	 	while ((cont>-1)&&(!achou))
	 	{
	 		if (nomearq.charAt(cont)=='.') achou=true;
	 		else
	 		{
	 			ext=nomearq.charAt(cont)+ext;
	 			cont--;
	 		}	 		
	 	}
	 	return ext;
	 }// fim de getExtensao
	 	
		 	 
	 // metodo leLinha 
	 protected static String leLinha(FileReader fi) throws Exception
	 {
	 	try
	 	{
	 		String temp=""; int ret=0; char tc;
		 	boolean achou=false;
		 	while ((!achou)&&(ret!=-1))
		 	{
		 		ret=fi.read();
		 		if (ret!=-1) 
		 		{
		 			tc=(char)ret;
		 			if (tc=='\n') achou=true;
		 			else temp+=tc;
		 		}
		 	}
		 	return temp;
	 }
	 catch (Exception e)
	 {
		String msg="ERRO DE LEITURA DE DADOS!!!\n"+e.getMessage();
		throw new Exception(msg);
	 }
 }	 // fim de leLinha
 
 // metodo trocaPonto
 protected static String trocaPonto(String txt)
 {
 	String retorno="";
 	for (int i=0;i<txt.length();i++)
 	if (txt.charAt(i)==',') retorno+='.';
 	else retorno+=txt.charAt(i);
 	return retorno;
 }
	
	/** Metodo para salvar uma string em um arquivo com 
	 * manipulacao do caracter /n dentro da string 
	 * @param txt String a ser salva no arquivo
	 * @param fs PrintWriter do arquivo
	 */
	public static void imprimeLinhas(String txt,PrintWriter fs)
	{
		String temp="";
		int tam=txt.length();
		for (int i=0;i<tam;i++)
		{
			if (txt.charAt(i)!='\n')temp+=txt.charAt(i);	
			else
			{ fs.println(temp); temp="";}
			if ((i==tam-1)&&(temp.length()>0)) fs.println(temp);
		}		
	}
			
	/**
   * Metodo para salvar uma string de resultados em um arquivo
   * @param texto String com os Resultados    */
  public static void salvaResultados(String texto) {
      boolean para = false;
      while (!para) {
          try { 
              String msg = "Nome do Arquivo de Resultados (com a extensao):";
              String nomearq = LeituraDados.leNomeArquivo(msg);
              PrintWriter fs = new PrintWriter(new FileOutputStream(nomearq),
                      true);
              IntArquivo.imprimeLinhas(texto, fs);
              fs.close();
              para = true;
          } catch (Exception e) {
              String msg = "ERRO ENCONTRADO!!!\n" + e.getMessage();
              OutputDialog saida = new OutputDialog();
              saida.write(msg);
              para = false;
          }
      }
  } // fim de salvaResultados
		
}// fim de IntArquivo